home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-07-23 | 26.5 KB | 510 lines | [04] ASCII Text (0x0000) |
- Apple II
- File Type Notes
- _____________________________________________________________________________
- Developer Technical Support
-
-
- File Type: $E0 (224)
- Auxiliary Type: $8000
-
- Full Name: Binary II File
- Short Name: Binary II File
-
- Written by: Matt Deatherage July 1989
-
- Files of this type and auxiliary type contain other files with their
- attributes encoded in Binary II format.
- _____________________________________________________________________________
-
- Binary II is a widely used and accepted standard for keeping file attributes
- with files as they are transferred, usually by modem or other form of
- telecommunication. Files that are known Binary II files should be written to
- disk with file type $E0 and auxiliary type $8000 as a clear indication to
- other programs that the file contains files with Binary II specifications.
-
- Binary II was developed by Gary B. Little, author of the Point-To-Point
- communication's product and author of several Apple II reference books. He is
- also Apple's Product Manager for third-party Development Tools and Languages.
- Gary welcomes your comments and suggestions on the Binary II standard at the
- following address:
-
- Gary B. Little
- 3304 Plateau Drive
- Belmont, CA 94002
-
- AppleLink: LITTLE
- AppleLink--Personal Edition: GaryLittle
- CompuServe: 70135,1007
- GEnie: GARY.LITTLE
-
-
- Why Binary II?
-
- Transferring Apple II files in binary form to commercial information services
- and bulletin boards (referred to in this Note as "hosts") can be, to put it
- mildly, a frustrating exercise. Although most hosts are able to receive a
- file's data in binary form (using protocols such as XMODEM), they don't
- receive the file's all-important attribute bytes. All the common Apple II
- file system, notably the ProDOS file system, store the attributes inside the
- disk directory, not inside the file itself.
-
- The ProDOS attributes are the access code, file type code, auxiliary type
- code, storage type code, date of creation and last modification, time of
- creation and last modification, the file size, and the name of the file
- itself. Under GS/OS, the same parameters exist for other file systems as well
- as file system-specific information and two-forked file information. It is
- usually not possible to use a ProDOS file's data without knowing the file's
- attributes (particularly the file type, auxiliary type, and size). Therefore,
- ProDOS files uploaded in binary format to a host are useless to those who
- download them. The same is true for DOS 3.3 and Pascal files.
-
- Many Apple II communication programs use special protocols for transferring
- file attributes during a binary file transfer, but none of these protocols
- have been implemented by hosts. These programs are only useful for exchanging
- files with another Apple II running the same program.
-
- Without a standard like Binary II, the only acceptable way to transfer an
- Apple II file to a host is to convert it into ASCII text before sending it.
- Such a text file would contain a listing of an AppleSoft program, or a series
- of Apple II monitor commands (e.g., 300:A4 32). Someone downloading a file
- can convert it to binary form using the AppleSoft EXEC command.
-
- The main disadvantage of this technique is that the text version of the file
- is over three times the size of the original binary file, making it expensive
- (in terms of time and money) to upload and download. It is also awkward, and
- sometimes impossible, to perform the binary-to-text or text-to-binary
- conversion.
-
- The solution to the problem is to upload an encoded binary file which contains
- not just the file's data, but the file's attributes as well. Someone
- downloading such a file can then use a conversion program to strip the
- attributes from the file and create a file with the required attributes.
-
- This Note describes such a format: Binary II. The description of the format
- is detailed for the purpose of allowing software developers to implement it in
- Apple II communication programs.
-
-
- What Binary II is Not
-
- Binary II is not an archival or compression standard. It is designed to be a
- simple method to keep the attributes normally in a disk file's directory entry
- with the file as it is transferred. Although multiple files may be placed
- together with Binary II, this is a matter of convenience for telecommunication
- programs.
-
- A true archival standard must be designed as such, with the capability to
- manipulate files within the archive as well as linking them together
- (compressed or uncompressed) for transfer. NuFX (documented in Apple II File
- Type Note for File Type $E0, Auxiliary Type $8002) is a good example of a
- robust, full-featured Apple II archival standard.
-
- Binary II is primarily designed to be added to and subtracted from files "on-
- the-fly" by telecommunication programs. Binary II files should only be found
- on disks when they are transferred by a telecommunication program that does
- not have Binary II capabilities, in which case a separate utility (such as
- Binary Library Utility by Floyd Zink, Jr.) must be used to extract the files.
- Telecommunication programs should be able to transfer files without Binary II
- processing, however, they should support Binary II processing as a default.
-
-
- The Binary II File Format
-
- The Binary II form of a standard file consists of a 128-byte file information
- header followed by the file's data. The data portion of the file is padded
- with nulls ($00 bytes), if necessary, to ensure the data length is an even
- multiple of 128 bytes.
-
- The file information header contains four ID bytes, the attributes of the file
- (in ProDOS 8 form), and some control information.
-
- The structure of the header is as follows:
-
- +000 ID Bytes 3 Bytes These three bytes are always $0A $47 $4C
- for identification purposes, so programs
- may recognize Binary II files as they are
- received.
- +003 Access Code Byte ProDOS 8 access byte.
- +004 File Type Byte ProDOS 8 file type.
- +005 Aux Type Word ProDOS 8 auxiliary type.
- +007 Storage Type Byte ProDOS 8 storage type value.
- +008 File Size Word The size of the file in 512-byte blocks.
- +010 Mod. Date 2 Bytes Date of modification, in ProDOS 8
- compressed format.
- +012 Mod. Time 2 Bytes Time of modification, in ProDOS 8
- compressed format.
- +014 Create Date 2 Bytes Date of creation, in ProDOS 8
- compressed format.
- +016 Create Time 2 Bytes Time of creation, in ProDOS 8
- compressed format.
- +018 ID Byte Byte A fourth ID byte. This must always be
- $02.
- +019 Reserved Byte Reserved, must be set to zero.
- +020 EOF 3 Bytes The end-of-file value for the file (low
- byte first).
- +023 File Name String Pascal string containing the ASCII
- filename or partial pathname of this file
- in ProDOS 8 format. The string cannot be
- longer than 64 characters.
-
- If the File Name String is a filename and not a partial pathname, then the
- following optional parameter may be supplied:
-
- +039 Native Name String Pascal string containing the
- ASCII value of the native filename. This
- string may not be longer than 48
- characters, and will not be present if the
- length byte of File Name (+023) is larger
- than 15 ($0F). If this field is
- specified, the File Name field must
- contain a filename, not a partial
- pathname.
-
- +088 Reserved 21 Bytes Reserved. These bytes must be set to zero
- for future compatibility.
-
- +109 GAux Type Word The high word of the file's GS/OS
- auxiliary type.
- +111 GAccess Byte The high byte of the file's GS/OS access
- word.
- +112 GFile Type Byte The high byte of the file's GS/OS
- file type.
- +113 GStorage Byte The high byte of the file's GS/OS storage
- type.
- +114 GFile Size Word The high word of the GS/OS file's
- size in 512-byte blocks.
- +116 GEOF Byte The high byte of the file's GS/OS EOF
- value.
- +117 Disk Space Long The number of 512-byte disk blocks
- the files inside the Binary II file will
- occupy after they've been removed from the
- Binary II file. (The format of a Binary
- II file containing multiple files is
- described later in this Note.) If the
- number is zero, the creator of the Binary
- II file didn't bother to calculate the
- space needed. This value must be placed
- in the file information header for the
- first file inside the Binary II file; it
- can be set to zero in subsequent headers.
- A downloading program can inspect Disk
- Space and abort the transfer immediately
- if there isn't enough free space on the
- disk.
- +121 OS Type Byte This value indicates the native operating
- system of the file:
- $00 ProDOS or SOS
- $01 DOS 3.3
- $02 Reserved
- $03 DOS 3.2 or DOS 3.1
- $04 Apple II Pascal
- $05 Macintosh MFS
- $06 Macintosh HFS
- $07 Lisa Filing System
- $08 Apple CP/M
- $09 Reserved (returned by the GS/OS
- Character FST)
- $0A MS-DOS
- $0B High Sierra (CD-ROM)
- $0C ISO 9660 (CD-ROM)
- $0D AppleShare
- Note this list is slightly different (in
- the first three entries) from the standard
- GS/OS file system ID list. A GS/OS
- communication program should not place a
- zero in this field unless the file's
- native file system truly is ProDOS. The
- file's native file system is returned in
- the file_sys_id parameter from the
- GetDirEntry call.
- +122 Native File Type
- Word This has meaning only if OS Type is non-
- zero. If so, it is set to the actual file
- type code assigned to the file by it's
- native operating system. (Some operating
- systems, such as MS-DOS and CP/M, do not
- use file type codes, however.) Contrast
- this with the File Type at +004, which is
- the closest equivalent ProDOS file type.
- The Native File Type is needed to
- distinguish files which have the same
- ProDOS file type, but which may have
- different file types in their native
- operating system. Note that if the file
- type code is only one byte long (the usual
- case), the high-order byte of Native File
- Type is set to zero.
- +124 Phantom File Flag
- Byte This byte indicates whether a receiver of
- the Binary II file should save the file
- which follows (flag is zero) or ignore it
- (flag is non-zero). It is anticipated
- that some communication programs will use
- phantom files to pass non-essential
- explanatory notes or encoded information
- which would be understood only by a
- receiver using the same communication
- program. Such programs must not rely on
- receiving a phantom file, however, since
- this would mean they couldn't handle
- Binary II files created by other
- communication programs. Phantom Files may
- also be used to pass extended file
- attributes when available.
-
- The first two bytes in a phantom file must
- contain an ID code unique to the
- communication program, or a universal
- identifier concerning the contents of the
- phantom file. Developers must obtain ID
- codes from Gary Little to ensure
- uniqueness (see the beginning of this Note
- for his address). Here is a current list
- of approved ID codes for phantom files
- used by Apple II communication programs:
- $00 $00 ASCII text terminated with a
- zero byte.
- $00 $01 Point-to-Point
- $00 $02 Tele-Master Communications
- System
- $00 $03 ProTERM
- $00 $04 Modem MGR
- $00 $05 CommWorks
- $00 $06 MouseTalk
- $01 $00 Option_list data (see later in
- this Note).
- The ID bytes are the first two bytes of
- the phantom file.
- +125 Data Flags Bit 7: 1 = file is compressed
- Flag Byte Bit 6: 1 = file is encrypted
- Bits 5-1: Reserved
- Bit 0: 1 = file is sparse
- A Binary II downloading program can
- examine this byte and warn the user that
- the file must be expanded, decrypted or
- unpacked. The person uploading a Binary
- II file may use any convenient method for
- compressing, encrypting, or packing the
- file but is responsible for providing
- instructions on how to restore the file to
- its original state.
- +126 Version Byte This release of Binary II has a version
- number of $01.
- +127 Number of Files to Follow
- Byte An appealing feature of Binary II is that
- a single Binary II file can hold multiple
- disk files, making it easy to keep a group
- of related files "glued" together when
- they're sent to a host. This byte
- contains the number of files in this
- Binary II file that are behind it. If
- this is the first file in a Binary II file
- containing three disk files, this byte
- would be $02. The second disk file in the
- same Binary II file would have a value of
- $01 in this parameter, and the last would
- have value $00. This count tells the
- Binary II downloading program how many
- files are remaining. If any phantom files
- are included, they must be included in
- this count.
-
-
- Filenames and Partial Pathnames
-
- You can put a standard ProDOS filename or a partial pathname in the file
- information header (but never a complete pathname). Don't use a partial
- pathname unless you've included, earlier in the Binary II file, file
- information headers for each of the directories referred to in the partial
- pathname. Such a header must have its "end of file position" bytes set to
- zero, and no data blocks for the subdirectory file must follow it.
-
- For example, if you want to send a file whose partial pathname is
- HELP/GS/READ.ME, first send a file information header defining the HELP/
- subdirectory, then one defining the HELP/GS/ subdirectory. If you don't,
- someone downloading the Binary II file won't be able to convert it because the
- necessary subdirectories will not exist.
-
- Note: GS/OS communication programs must use the slash (/) as the
- pathname's separator in any partial pathname it puts in the
- header. Since GS/OS's standard separator is the colon (:), a
- conversion may be necessary.
-
-
- Filename Convention
-
- Whenever a file is sent to a host, the host asks the sender to provide a name
- for it. If it's a file in Binary II form, the name provided should end in
- .BNY so its special form will be apparent to anyone viewing a list of
- filenames. If the file is compacted (using the public-domain Squeeze
- algorithm) before being converted to Binary II form, use a .BQY suffix
- instead. If the file is a NuFX archive, use the suffix .BXY.
-
-
- Identifying Binary II Files
-
- You can determine, while transferring, if a file is in Binary II form by
- examining the ID bytes at offsets +000, +001, +002 and +018 from the beginning
- of the file. They must be $0A, $47, $4C and $02, respectively.
-
- Once Binary II files are identified, you can use the data in the file
- information header to create and open a ProDOS file with the correct name and
- attributes, transfer the file data in the Binary II file to the ProDOS file,
- set the ProDOS file size, then close the ProDOS file. You would repeat this
- for each file contained inside the Binary II file.
-
- Note: The number of 128-byte blocks following the file information
- header must be derived from the EOF attribute for the file.
- Calculate the number by dividing the EOF by 128 and adding one to
- the result if EOF is not 0 or an exact multiple of 128. However,
- if the file information header defines a subdirectory (the file
- type is $0F), simple create the subdirectory file. Do not open it
- and do not try to set its size.
-
- Ideally, all this conversion work will be done automatically by a
- communication program during file transfer. If not, a separate conversion
- program (such as the previously mentioned Binary Library Utility, or BLU) must
- be used to do this for you.
-
-
- Option_List Phantom Files
-
- GS/OS will return, when asked, an option_list for files on many file calls.
- The option_list consists of a Word buffer length (which must be at least $2E),
- followed by a Word number of bytes GS/OS put in the buffer, a Word GS/OS file
- system identification, and the given number of bytes of FST-specific
- information (minus two; the count GS/OS returns includes the file system
- identifier).
-
- Option_list values are FST specific and contain values important to the native
- file system but not important to GS/OS. For AppleShare, the option_list
- contains Finder Information, parent directory identification, and access
- privileges. This information should be transferred with files.
-
- Binary II uses a phantom file with identifier $01 $00 to indicate an
- option_list. When this phantom file is seen, the contents should be used as
- the option_list for the file that immediately follows this file in the
- Binary II file. The other attributes of the phantom file must be set to the
- same values as those for the file immediately following (the file for which
- the phantom file contains the option_list). The EOF for the phantom file must
- be the size of the option_list + 2, and the file size must be adjusted
- accordingly to account for the phantom file ID bytes.
-
- When receiving a Binary II file, the contents of this phantom file should be
- used as option_list input on a GS/OS SetFileInfo call.
-
- If the GS/OS option_list returns a total of two bytes (just the file_sys_ID),
- there is no FST-specific information, and the option_list phantom file may
- safely be omitted.
-
- The format of the option_list phantom file is as follows:
-
- +000 Phantom ID 2 Bytes The identifying bytes $01 $00.
- +002 List Size Word The length of the bytes in the
- option_list, starting with the file system
- ID (the next word).
- +004 FileSysID Word A GS/OS (not Binary II) file_sys_ID for
- the volume on which the file was stored.
- +006 List Bytes Bytes The bytes of the option list.
- There should be (List Size) of them,
- counting the previous word (FileSysID).
-
-
- Extended File Considerations
-
- Extended files contain two logical segments: a data fork and a resource fork.
- These files can be created and manipulated by GS/OS, but not by ProDOS 8 or
- any other Apple II operating system.
-
- When a GS/OS-based communication program sends an extended file, it must send
- it in the AppleSingle file format, preceded by a Binary II file information
- header. (Such a program could easily convert an extended file to AppleSingle
- format on the fly.) The Binary II header must contain the attributes of the
- AppleSingle file (including a file type of $E0 and an auxiliary type of $0001)
- and the "storage type code" field must be $01. (The EOF positions for the
- data fork and resource fork of the extended file appear in an entry in the
- AppleSingle file header, not in the Binary II header.)
-
- The AppleSingle format is described in Apple II File Type Note for File Type
- $E0, Auxiliary Type $0001.
-
- A GS/OS-based communication program that receives an AppleSingle file can
- easily convert it on the fly to the extended file it defines. ProDOS 8-based
- communication programs can only save the AppleSingle file to disk because it's
- not possible (nor is it encouraged to attempt) to create extended files with
- ProDOS 8 (without using block-level calls); a GS/OS based utility program is
- needed to convert the AppleSingle file to its extended form.
-
-
- DOS 3.3 Considerations
-
- With a little extra effort, you can also convert DOS 3.3 files to Binary II
- form. This involves translating the DOS 3.3 file attributes to the
- corresponding ProDOS attributes so that you can build a proper file
- information header.
-
- o Set the name to one that adheres to the stricter ProDOS naming
- rules and put its length at +023 and the name itself at +024 to
- +038. Note that the name must be a simple filename and not a
- pathname. The actual DOS 3.3 filename must be placed at +039
- (length) and +040 to +087 (name). (DOS 3.3 actually restricts
- filenames to 30 characters.)
-
- o Set the ProDOS file type, auxiliary type and access to values
- which correspond to the DOS 3.3 file type:
-
- DOS 3.3 ProDOS ProDOS ProDOS
- File Type File Type Auxiliary Type Access
- __________________________________________________
- $00 (T) $04 $0000 $E3
- $80 (*T) $04 $0000 $21
- $01 (I) $FA $0C00 $E3
- $81 (*I) $FA $0C00 $21
- $02 (A) $FC * $E3
- $82 (*A) $FC * $21
- $04 (B) $06 ** $E3
- $84 (*B) $06 ** $21
- $08 (S) $06 $0000 $E3
- $88 (*S) $06 $0000 $21
- $10 (R) $FE $0000 $E3
- $90 (*R) $FE $0000 $21
- $20 (A) $06 $0000 $E3
- $A0 (*A) $06 $0000 $E3
- $40 (B) $06 $0000 $E3
- $C0 (*B) $06 $0000 $21
- __________________________________________________
-
- * Set the auxiliary type for an A file to the
- memory address from which the program was saved.
- This is usually $0801.
- ** Set the auxiliary type for a B file to the
- value stored in the first two bytes of the the
- file (this is the default load address).
-
- o Set the storage type code to $01.
- o Set the size of file in blocks, date of creation, date of
- modification, time of creation and time of modification all to
- $0000.
- o Set the end-of-file position to the length of the DOS 3.3 file, in
- bytes. For a B file (code $04 or $84), this number is stored in
- the third and fourth bytes of the file. For an I file (code $01
- or $81) or an A file (code $02 or $82), this number is stored in
- the first and second bytes of the file.
- o Set the operating system type to $01.
- o Set the native file type code to the value of the DOS 3.3 file
- type code.
-
- Attribute bytes inside a DOS 3.3 file (if any) must not be included in the
- data portion of the Binary II file. This includes the first four bytes of a B
- (Binary) file, and the first two bytes of an A (AppleSoft) or I (Integer
- BASIC) file.
-
-
- Further Reference
- _____________________________________________________________________________
- o GS/OS Reference
- o ProDOS 8 Technical Reference Manual
- o Apple II File Type Note, File Type $E0, Auxiliary Type $0001
- o Apple II File Type Note, File Type $E0, Auxiliary Type $8002
- o Apple II Miscellaneous Technical Note #14, Guidelines for
- Telecommunication Programs